#include <stdio.h>

// 自定义函数
// 函数名add
// 返回类型int
// 函数有两个参数 a b
int add(int a, int b)
{
    return a + b;
}

//自定义函数
//没有返回值
//没有参数
void test()
{
    printf("test\n");
}

void test1();
//声明一个函数，在主函数之后定义的函数必须声明

void test2(int a)// int a是形参
    //形参定义的时候不占用内存
    //调用的时候才占用内存
    //函数调用完成后，形参所占内存释放
{
    ++a;
    printf("a = %d\n", a);
}

int test3()
{
    return 10;
    // 所有函数遇到return就终止了
    // 下面的hello world不会执行打印
    printf("hello world\n");
}

int max(int a, int b)
{
    return (a > b) ? a : b;
}




int main()
{
    int i = 2;
    int j = 3;
    int c = add(i, j);//调用函数
    printf("c = %d\n", c);

    test();//调用一个没有返回值，没有参数的函数
    test1();
    test2(j);//j 实参
    test2(20 + 21321);
    test2(20);
    // 实参可以是变量，常量，表达式
    // 实参类型必须和形参匹配
    // 形参的值来自于实参，
    // 但形参的值改变后并不会改变实参的值
    int m = test3();
    printf("m = %d\n", m);


    int k = max(i, j);
    printf("k = %d\n", k);

    // 实参形参也可以兼容
    char a1 = 5;
    char a2 = 43;
    int l = max(a1, a2);
    printf("l = %d\n", l);
    return 0;
}

void test1()
{
    printf("test1\n");
}
